package org.dromara.common.core.xss;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：自定义xss校验注解
 */
/**
 * 定义了一个Xss注解，用于标识不允许执行脚本的位置
 * 该注解可以应用于方法、字段、构造函数和参数上
 * 通过XssValidator进行验证，确保不执行任何脚本
 */
// 运行时保留，使得注解可以在运行时被读取
@Retention(RetentionPolicy.RUNTIME)
// 指定注解的使用场景
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
// 指定使用XssValidator进行验证
@Constraint(validatedBy = {XssValidator.class})
public @interface Xss {

    /**
     * 定义了当验证失败时的默认错误消息
     *
     * @return 默认错误消息
     */
    String message() default "不允许任何脚本运行";

    /**
     * 定义了用于验证的组，用于在不同验证组中使用不同的验证规则
     *
     * @return 验证组的类数组
     */
    Class<?>[] groups() default {};

    /**
     * 定义了在验证失败时的负载，可以用于进一步的处理或信息提供
     *
     * @return 负载的类数组
     */
    Class<? extends Payload>[] payload() default {};

}
